import { reqSendCode, reqRegister, reqLogin, reqUserInfo, reqLogout } from '@/api'
import { setToken, getToken, removeToken } from '@/utils/token'
export default {
  state: {
    code: '',
    token: getToken(),
    userInfo: {}
  },
  mutations: {
    GETCODE(state, code) {
      state.code = code
    },
    GETLOGIN(state, token) {
      state.token = token
    },
    GETUSERINFO(state, userInfo) {
      state.userInfo = userInfo
    },
    // 退出登录需要清除token和用户信息,并且删除本地存储的token
    LOGOUT(state) {
      state.token = ''
      state.userInfo = {}
      removeToken()
    }
  },
  actions: {
    // 获取验证码
    async getCode({ commit }, phone) {
      const res = await reqSendCode(phone)
      if (res.code === 200) {
        commit('GETCODE', res.data)
        // 成功返回成功
        return 'ok'
      } else {
        return Promise.reject(new Error('faile'))
      }
    },
    // 获取注册信息
    async getRegister({ commit }, data) {
      const res = await reqRegister(data)
      if (res.code === 200) {
        return 'ok'
      } else {
        return Promise.reject(new Error('faile'))
      }
    },
    // 获取登录信息
    async getLogin({ commit }, data) {
      const res = await reqLogin(data)
      // 获取服务器返回的token（用户的唯一标识牌）
      if (res.code === 200) {
        commit('GETLOGIN', res.data.token)
        // vuex不能持久化存储数据
        // 用本地存储持久化存储token
        setToken(res.data.token)
        return 'ok'
      } else {
        return Promise.reject(new Error('账号或密码错误'))
      }
    },
    // 获取用户信息
    async getUserInfo({ commit }) {
      const res = await reqUserInfo()
      if (res.code === 200) {
        commit('GETUSERINFO', res.data)
        return 'ok'
      } else {
        return Promise.reject(new Error('faile'))
      }
    },
    // 退出登录
    async logout({ commit }) {
      const res = await reqLogout()
      if (res.code === 200) {
        // 清除state中的token和userInfo
        commit('LOGOUT')
        return 'ok'
      } else {
        return Promise.reject(new Error('faile'))
      }
    }
  },
  getters: {}
}
